我怎么能在另一个小部件中使用QColorDialog而不是单独的对话框?

bal*_*los 8 user-interface qt qt4 color-picker

我想使用QColorDialog不是一个对话窗口,而是作为一个小部件,我可以插入到布局中.(更具体地说,作为上下文菜单中的自定义子菜单)

我查看了QColorDialog源代码,我可能会复制QColorDialog的一部分内部实现来实现这一目标,但是有更简洁的方法吗?我正在使用Qt 4.5.1 ...

Wiz*_*Wiz 17

QColorDialog是一个对话框,意味着IT是一个小部件.您需要做的就是设置一些窗口标志,并根据需要将其放入您的布局中.这是一个(测试的)示例:

#include <QApplication>
#include <QMainWindow>
#include <QColorDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    /* setup a quick and dirty window */
    QMainWindow app;
    app.setGeometry(250, 250, 600, 400);

    QColorDialog *colorDialog = new QColorDialog(&app);
    /* set it as our widiget, you can add it to a layout or something */
    app.setCentralWidget(colorDialog);
    /* define it as a Qt::Widget (SubWindow would also work) instead of a dialog */
    colorDialog->setWindowFlags(Qt::Widget);
    /* a few options that we must set for it to work nicely */
    colorDialog->setOptions(
                /* do not use native dialog */
                QColorDialog::DontUseNativeDialog
                /* you don't need to set it, but if you don't set this
                    the "OK" and "Cancel" buttons will show up, I don't
                    think you'd want that. */
                | QColorDialog::NoButtons
    );

    app.show();
    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)


Len*_*ick -1

如果有一种方法可以干净地做到这一点,我不知道。在我看来,你有几个选择:

  • 将其子类化并复制实际构造小部件的代码,进行编辑以删除创建对话框窗口的部分并将其替换为其他容器。
  • 如果您不打算使用该特定对话框,qt 解决方案中的颜色三角形小部件可能会起作用,因为它不是对话框窗口。您可以在http://doc.trolltech.com/solutions/4/qtcolortriangle/qtcolortriangle.html找到它(删除链接中的空格)