gpt4 book ai didi

qt - 无法通过菜单操作更改 Qt 主窗口中的光标

转载 作者:行者123 更新时间:2023-12-05 01:19:02 26 4
gpt4 key购买 nike

在我的主窗口中,我有一个按钮和一个菜单栏项,它们的信号都连接到同一个插槽。在槽函数中,我写了:

mainWindow->setCursor(QCursor(Qt::WaitCursor));

当通过按钮调用槽函数时,这会按预期工作;然而,当从菜单中调用相同的功能时,等待光标不会出现。知道为什么吗?

我还考虑过使用 QApplication::setOverrideCursor;但是,这会导致其他问题。

有什么建议吗?谢谢!

(我正在使用 Qt 4.7,并使用带有默认 MinGW 编译器的 Qt Creator 在 Windows 7 上进行开发。)

这里有更多细节。

在 MainWindow 构造函数中:this->setCursor(Qt::CrossCursor);

信号/槽连接:

QObject::connect(button, SIGNAL(clicked()), MainWindow, SLOT(showMessageBox()));  
QObject::connect(action, SIGNAL(triggered()), MainWindow, SLOT(showMessageBox()));

显示消息框函数:

void MainWindow::showMessageBox()
{
this->setCursor(Qt::WaitCursor);
// display wait cursor briefly before showing message box
for (int i = 0; i < 1<<30; ) {++i;}
QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setCursor(Qt::PointingHandCursor);
msgBox.exec();
this->setCursor(Qt::CrossCursor);
}

当使用“按钮”调用 showMessageBox 时,等待光标按预期显示。

当通过'action'调用showMessageBox时,等待光标不会出现;相反,只要用户选择“操作”菜单项,光标就会从 Qt::CrossCursor 变为 Qt::ArrowCursor,然后在消息框打开后变为 Qt::PointingHandCursor。等待光标永远不会出现。

最佳答案

您的代码是同步的并且使用延迟循环。当您处于延迟循环中时,任何 Qt 代码都无法执行。光标更改需要事件循环旋转 - 因此它会出现在您提供的症状中。

这是正确的做法——请记住,如果您在 GUI 代码中使用延迟/ sleep 和其他阻塞调用,您的用户会讨厌您,这是理所当然的。在消息/对话框中使用 exec() 也是一种糟糕的风格。您的应用程序是异步的,请对其进行编码。确保您的插槽已这样声明(在 protected 插槽中:MainWindow 声明的部分)。

void MainWindow::showMessageBox()
{
this->setCursor(Qt::WaitCursor);
QTimer::singleSlot(200, this, SLOT(slot1()); // fire slot1 after 200ms
}

void MainWindow::slot1()
{
QMessageBox * msgBox = new QMessageBox(this);
msgBox->setText("Hello!");
msgBox->setStandardButtons(QMessageBox::Ok);
msgBox->setCursor(Qt::PointingHandCursor);
msgBox->show();
connect(msgBox, buttonClicked(QAbstractButton*), SLOT(slot2(QAbstractButton*)));
}

void MainWindow::slot2(QAbstractButton* button)
{
// a button was clicked on the message box
this->setCursor(Qt::CrossCursor);
}

关于qt - 无法通过菜单操作更改 Qt 主窗口中的光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com