Qt - 如何覆盖小部件?

Posted

技术标签:

【中文标题】Qt - 如何覆盖小部件?【英文标题】:Qt - How to override a widget? 【发布时间】:2011-01-06 13:11:56 【问题描述】:

我使用 Qt 设计器创建了一个包含 QToolButton 的表单。 我可以使用 ui->favouriteToolButton 来打开它。 我使用了设计器,因为它比编写所有 gui 代码要简单得多。

问题是专门针对这个ToolButton 我想通过创建自己的类来编码:

class FavouriteMenu : public QToolButton

    Q_OBJECT

public:
    explicit FavouriteMenu(QWidget *parent = 0);
    //~FavouriteMenu();

private:
    QMenu *menu;                                        //MENU
    QAction *addToBookmarkAct;
    QAction *editBookmarkAct;

...

我希望能够用 FavouriteMenu 的新实例覆盖 ui->favouriteToolButton。 我该怎么做?

【问题讨论】:

【参考方案1】: 右键单击设计器中的按钮并选择“Promote To...” 在升级类名称下输入“FavouriteMenu” 在 Header File 下输入 .h 文件的文件名 点击“添加” 点击“推广”

【讨论】:

我这样做了,但旧按钮仍然长矛并且比这更奇怪 - 我什至从设计器中删除了按钮并重新编译它仍然存在...... 无论我在设计器中进行什么更改并重新编译,我都会得到相同的 gui 确保重建所有中间文件 除了“全部清理”和“全部重建”之外我能做的任何事情? 不知道你使用的是什么开发环境我们不知道,但是.ui文件被转换成代码,testwindow.ui转换成ui_testwindow.[h|cpp] iirc,你应该看到变化您在这些文件中指定,即声明 QToolButton *yourbuttonName 应该是 FavouriteMenu *yourbuttonName 并且带有收藏菜单的 .h 文件应该在包含列表中。如果这些不正确,则 .ui 文件尚未刷新,或者您没有保存更改

以上是关于Qt - 如何覆盖小部件?的主要内容,如果未能解决你的问题,请参考以下文章

[Qt]如何支持:自定义小部件样式表的按下状态?

在QOpenGLWidget上使用Qt5小部件而不重写?

如何在另一个小部件更新qt中的相同内容后更新小部件内容

QT:如何关闭同一个小部件的多个窗口?

如何关闭在提升的小部件中单击的按钮上的 qt 小部件 ui?

如何避免鼠标单击一个小部件触发 Qt 中其他小部件的信号?