标签: qwidget

是否可以设置qt小部件的不透明度?

我知道有一个功能,QWidget::setWindowOpacity(qreal level)但正如文档中所写,这只适用于Windows.

有没有办法让布局内部的小部件也不透明?

我正在尝试做的是一个动画,其中小部件正在消失.我曾经使用偏好对话框进行了操作.

那么你认为有一种方法或解决办法来实现布局内的小部件的不透明度吗?你会怎么做?

提前致谢!

c++ qt opacity qwidget

9
推荐指数
2
解决办法
2万
查看次数

QT - 主要小部件 - 堆栈还是堆?

我是否应该更喜欢在堆栈或堆上初始化我的主要小部件,我有点困惑.在"使用QT 4进行C++ GUI编程"中,主要小部件在堆栈上初始化.在我说更多之前,我会解释我的意思:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

现在,也许这只是因为它更安全,也许是因为他们不想让读者混淆QT中的内存分配.对从QObject继承的对象留下任何删除肯定会让读者"忘记"使用QT对象进行内存管理.但是,我的问题是,我们应该更喜欢这种方法,还是以下方法:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow* mainWin = new MainWindow;
    mainWin->show();
    int execReturn = app.exec();
    delete mainWin;
    return execReturn;
}
Run Code Online (Sandbox Code Playgroud)

我提出这个问题的主要原因是我通常更愿意遵循选择堆与堆栈的模式:

  • 如果项目很大 -
  • 如果该项目是长期的 -
  • 否则 - 堆栈

现在,我想我的问题归结为两个问题:

  • QWidget是否大到我应该担心堆栈溢出的程度?
  • 一般应用程序的堆栈有多大?什么时候我应该担心堆栈溢出(除了明显的递归函数)?

我意识到QWidget本身不太可能导致堆栈溢出,但当然这将是我的应用程序可能具有的任何其他堆栈使用之上.

c++ memory-management qt4 qwidget static-memory-allocation

9
推荐指数
1
解决办法
2829
查看次数

QT如何将应用程序嵌入到QT小部件中

在我们的项目中,我们有三个独立的应用程序,我们必须开发一个控制这三个应用程序的QT控制应用程序.主窗口将分成三个子窗口 - 每个窗口显示另一个应用程序.
我想使用QX11EmbedWidgetQX11EmbedContainer小部件,但有两个问题:

  1. QX11Embed*基于X11协议,我不知道它是否支持非x11系统,如Windows操作系统.
  2. 从QT 5开始,这些类不存在,QT文档没有提到原因.

所以我不知道是否使用它 - 我很乐意得到答案.
另外,我看到QT 5.1包含QWidget :: createWindowContainer(); 功能,在一些帖子中,它看起来应该是X11Embed的替代品.任何人都可以请更多地了解我如何使用此功能创建一个QT小部件,它将在其中运行另一个应用程序(例如计算器)?

我在谷歌搜索了很多,并没有找到我的Qs的答案.
谁能帮帮我吗?我是正确的吗?
谢谢!

c++ qt qwidget qx11embedcontainer

9
推荐指数
2
解决办法
1万
查看次数

如何为具有复合窗口小部件的表单设置Qt Tab顺序?

我有一个用Qt Designer编写的表单,其中包含一个QWidget,它被提升为我拥有的自定义小部件.自定义小部件包含几个组合框.我希望表单具有合理的Tab键顺序,焦点从自定义小部件之前的小部件移动,然后通过自定义小部件中的组合框,然后在自定义小部件之后继续到小部件.因此,我将QWidget设置为在Designer中具有选项卡焦点,但自定义窗口小部件无法正确处理焦点.

我可以使用QWidget :: setTabOrder解决这个问题,但这会很麻烦,因为我必须从外部进入自定义小部件.或者,我可以为自定义小部件提供成员函数来设置Tab键顺序.理想情况下应该有一个更简单的方法.在那儿?

c++ qt qwidget

9
推荐指数
0
解决办法
3457
查看次数

Qt - 清除QWidget布局中的所有小部件

我有QWidget一个对话框.在程序运行过程中,几个QCheckBox *对象被添加到布局中,如下所示:

QCheckBox *c = new QCheckBox("Checkbox text");
ui->myWidget->layout()->addWidget(c);
Run Code Online (Sandbox Code Playgroud)

这适用于所有复选框.但是,QPushButton我的对话框中也有一个名为"clear"的按钮,当它被按下时应该清除myWidget中的所有内容,使其保持空白状态,就像之前QCheckboxes添加任何内容一样.我一直在网上和文档中寻找,但我找不到这样做的方法.我发现这个问题与我的问题类似,并尝试了这样的解决方案:

void myClass::on_clear_clicked()
{
  while(ui->myWidget->layout()->count() > 0)
  {
    QLayoutItem *item = ui->myWidget->layout()->takeAt(0);
    delete item;
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎没有做任何事情.值得注意的是,我不确定这是否正确地从他的答案中翻译出来; 有点不清楚应该如何实现所给出的功能,所以我做了最好的教育猜测.如果有人知道我可以在上面改变它以使它工作(或者只是一种不同的工作方式),那将非常感激.

c++ qt qwidget

9
推荐指数
2
解决办法
2万
查看次数

扩展共同基础:Diamond继承与QObject

我想我在这里遇到了一种钻石继承问题.

Qt提供了几个旋转框,用于整数值,用于双精度以及日期/时间.它们都来自QAbstractSpinBox:

#include <QtWidgets/QSpinBox>
class QSpinBox:
    public QAbstractSpinBox {

};

#include <QtWidgets/QDoubleSpinBox>
class QDoubleSpinBox:
    public QAbstractSpinBox {

};
Run Code Online (Sandbox Code Playgroud)

现在我想添加一些通用于所有旋转框的功能,在这个具体的例子中,一个按钮将旋转框恢复到最小(因此是specialValueText).所以我也从中衍生出来QAbstractSpinBox并想出了这样的东西:

class AbstractRevertibleSpinBox:
    public QAbstractSpinBox {

    public:
        RevertibleSpinBox() {
            /* Use abstract base: */
            QAction *revertAction = new QAction(this);
            QAbstractSpinBox::lineEdit()->addAction(
                revertAction, QLineEdit::TrailingAction);
            /* ... */
        }

    public slots:
        virtual void revert()  = 0;
}
Run Code Online (Sandbox Code Playgroud)

revert()包含应该实现如何恢复不同旋转框的纯净.例如,setValue(double)用于QDoubleSpinBoxsetDate(QDate)用于QDateEdit.然后我以明显的方式为我需要的所有旋转框派生了相应的类,如下所示:

class RevertibleSpinBox:
    public QSpinBox,
    public AbstractRevertibleSpinBox {

    protected:
        void revert() {
            /* Revert …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance qt qwidget qt-signals

9
推荐指数
1
解决办法
517
查看次数

如何让QWidget始终处于领先地位?

我的QMainWindow上有两个按钮.一个到btnShowKb和另一个btnHideKb.当我按btnShowKb时,它会显示一个QWidget.我希望这个QWidget始终位于所有窗口的顶部,直到我按下btnHideKb.当它在顶部时,我想要激活QWidget和QMainWidget.

有人可以建议吗?

qwidget qmainwindow

8
推荐指数
2
解决办法
1万
查看次数

如何在子窗口小部件具有焦点时更改父窗口小部件的背景?

我想强调一个QFrame,如果它的一个子小部件有焦点(所以用户知道在哪里寻找光标;-)

用的东西

ui->frame->setFocusPolicy(Qt::StrongFocus);
ui->frame->setStyleSheet("QFrame:focus {background-color: #FFFFCC;}");
Run Code Online (Sandbox Code Playgroud)

当我点击它时突出显示QFrame,但是一旦选择了其中一个子窗口小部件,它就会失去焦点.

可能的方法:

  • connect() QApplication::focusChanged(old,now)如果它是我的QFrame的孩子,我可以检查每个新对象,但这会变得混乱.

  • 我也可以子类化每个子窗口小部件并重新实现focusInEvent()/ focusOutEvent()并对此作出反应,但是对于许多不同的窗口小部件,这也是很多工作.

有更优雅的解决方案吗?

qt focus qt4 qwidget

8
推荐指数
2
解决办法
4657
查看次数

单击关闭按钮后取消关闭QWidget

QWidget单击关闭按钮后是否可以保持打开状态?假设小部件是主要小部件.即不是另一个小部件的孩子.

qt qt4 qwidget qevent

8
推荐指数
1
解决办法
3082
查看次数

Qt:窗户周围的阴影

我可以为widget添加阴影:

QGraphicsDropShadowEffect *bodyShadow = new QGraphicsDropShadowEffect;
bodyShadow->setBlurRadius(9.0);
bodyShadow->setColor(QColor(0, 0, 0, 160));
bodyShadow->setOffset(4.0);
ui->widget->setGraphicsEffect(bodyShadow);
Run Code Online (Sandbox Code Playgroud)

但是这个阴影只会在左下方.我需要围绕小部件的影子.如何添加?

c++ qt window shadow qwidget

8
推荐指数
1
解决办法
7194
查看次数