在我正在处理的QT应用程序中,我们让用户使用QColorDialog :: getColor()选择一种颜色 . 基于外部事件,我需要取消此打开的对话框 . 有办法吗?我没有在QColorDialog上看到任何其他静态方法退出对话框 .
或者,可能是一个更好的方法是关闭所有打开的对话框 . 有这样的方法吗?
在此Qt论坛帖子之后,
http://www.qtforum.org/article/37032/ok-cancel-buttons-on-qcolordialog.html
我测试了以下代码 .
QColor color = QColorDialog::getColor(); if (!color.isValid()) return; // Your process for selected color // ...
它适合我 .
使用静态getColor()函数时无法执行此操作 .
构造一个对话框对象,以便获得一个指针,允许您调用所有可用的函数(如reject()或close()) .
这是您通过 QColorDialog::getColor 调用的代码:
QColorDialog::getColor
QColorDialog dlg(parent); if (!title.isEmpty()) dlg.setWindowTitle(title); dlg.setOptions(options); dlg.setCurrentColor(initial); dlg.exec(); return dlg.selectedColor();
如您所见,它创建了堆栈的 QColorDialog 实例,设置其初始属性,显示它并返回结果 . 您可以使用相同的代码创建对话框但请注意对话框的显示方式 .方法 QDialog::exec 创建一个新的事件循环(http://qt-project.org/doc/qt-4.8/qeventloop.html),并且在对话框关闭之前不会返回 .'s why you can' t调用 QDialog 的任何方法 . 因此 QDialog::exec 创建了所谓的 modal 窗口(http://qt-project.org/doc/qt-4.8/qwidget.html#windowModality-prop) .
QColorDialog
QDialog::exec
QDialog
modal
Solution为了能够与对话框进行交互,您需要使用operator new 创建它,并使用方法 QDialog::show 来显示对话框 . 但是此方法在显示对话框时立即返回控制 . 因此,您将无法在代码的下一行中获得颜色 . 相反,您需要订阅对话框信号 accepted 和 rejected ,处理结果( dialog->currentColor() )并删除对话框对象 .
new
QDialog::show
accepted
rejected
dialog->currentColor()
你也问过 close all opened dialog 的方法 . 假设所有对话都是从 QDialog 继承的:
foreach (QWidget *widget, QApplication::topLevelWidgets()) { if (QDialog* dialog = qobject_cast<QDialog*>(widget)) dialog->close(); }
这对我有用:
QColorDialog *dialog = new QColorDialog(this); dialog->show(); QObject::connect(dialog,&QDialog::accepted,[=](){ QColor color = dialog->currentColor(); QVariant variant = color; QString rgb= variant.toString(); ui->eg->setStyleSheet("QLabel { color :"+rgb+" ; }");});`
我希望它可以帮到某人!上面的工作是改变QLabel字体和/或框架,但你可以尝试不同的样式表,即
ui->label->setStyleSheet("QLabel { background-color :"+rgb+" ; color : white; }");
4 回答
在此Qt论坛帖子之后,
http://www.qtforum.org/article/37032/ok-cancel-buttons-on-qcolordialog.html
我测试了以下代码 .
它适合我 .
使用静态getColor()函数时无法执行此操作 .
构造一个对话框对象,以便获得一个指针,允许您调用所有可用的函数(如reject()或close()) .
这是您通过
QColorDialog::getColor
调用的代码:如您所见,它创建了堆栈的
QColorDialog
实例,设置其初始属性,显示它并返回结果 . 您可以使用相同的代码创建对话框但请注意对话框的显示方式 .方法
QDialog::exec
创建一个新的事件循环(http://qt-project.org/doc/qt-4.8/qeventloop.html),并且在对话框关闭之前不会返回 .'s why you can' t调用
QDialog
的任何方法 . 因此QDialog::exec
创建了所谓的modal
窗口(http://qt-project.org/doc/qt-4.8/qwidget.html#windowModality-prop) .Solution
为了能够与对话框进行交互,您需要使用operator
new
创建它,并使用方法QDialog::show
来显示对话框 . 但是此方法在显示对话框时立即返回控制 . 因此,您将无法在代码的下一行中获得颜色 . 相反,您需要订阅对话框信号accepted
和rejected
,处理结果(dialog->currentColor()
)并删除对话框对象 .你也问过 close all opened dialog 的方法 . 假设所有对话都是从
QDialog
继承的:这对我有用:
我希望它可以帮到某人!上面的工作是改变QLabel字体和/或框架,但你可以尝试不同的样式表,即
ui->label->setStyleSheet("QLabel { background-color :"+rgb+" ; color : white; }");