首页 文章

如何取消QColorDialog :: getColor()?

提问于
浏览
1

在我正在处理的QT应用程序中,我们让用户使用QColorDialog :: getColor()选择一种颜色 . 基于外部事件,我需要取消此打开的对话框 . 有办法吗?我没有在QColorDialog上看到任何其他静态方法退出对话框 .

或者,可能是一个更好的方法是关闭所有打开的对话框 . 有这样的方法吗?

4 回答

  • 2

    在此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
    // ...
    

    它适合我 .

  • 2

    使用静态getColor()函数时无法执行此操作 .

    构造一个对话框对象,以便获得一个指针,允许您调用所有可用的函数(如reject()或close()) .

  • 0

    这是您通过 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) .

    Solution
    为了能够与对话框进行交互,您需要使用operator new 创建它,并使用方法 QDialog::show 来显示对话框 . 但是此方法在显示对话框时立即返回控制 . 因此,您将无法在代码的下一行中获得颜色 . 相反,您需要订阅对话框信号 acceptedrejected ,处理结果( dialog->currentColor() )并删除对话框对象 .

    你也问过 close all opened dialog 的方法 . 假设所有对话都是从 QDialog 继承的:

    foreach (QWidget *widget, QApplication::topLevelWidgets()) {
         if (QDialog* dialog = qobject_cast<QDialog*>(widget))
             dialog->close();
     }
    
  • 0

    这对我有用:

    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; }");

相关问题