在Qt中,如果我右键单击工具栏,将显示允许我隐藏工具栏的菜单.我需要禁用此功能,因为我不希望工具栏可以隐藏.有没有办法做到这一点?
我想在Qt中有一个包含QActions或QToolbarButtons的工具栏,它们附有弹出菜单.通过创建QMenu,将其添加到QToolbarButton然后将其添加到QToolbar,我已经能够在代码中完美地完成此操作.我的问题是,这应该可以在设计师中完全完成.
这是我通过代码完成的工作,我想在qt designer中定义按钮和菜单:

我们想要用qt设计器做的是将代码与接口分开.例如,这意味着一个人可以设计表单的外观和组件,然后程序员可以采用它并编写其背后的功能.如果工具栏和菜单必须由程序员设计,我们无法非常有效地完成此任务.
对于许多应用程序来说,这似乎是一个相当常见的要求,我无法看到Qt如何强制在代码而不是设计器中完成此操作.
如果有人对如何做到有任何想法,也许我在Qt中遗漏了一些东西?
我想制作一个带有一些动作的QToolBar,每个动作都是"可检查的"(也就是说,我在创建它之后对每个动作调用setCheckable(true),这使得按钮在点击后处于关闭状态).
我可以想到"取消选中"其他按钮的唯一方法是挂钩每个按钮的触发信号,并在选中给定按钮时取消选中其他按钮.
有没有更好的办法?
我正在尝试使用 stylesheet 中的以下内容在 Qt 设计器中设置 QToolBar 的背景颜色background : rgb(30, 30, 30)。出于某种原因,背景颜色仅适用于动作的背景,如图像中所示。如何更改整个工具栏的颜色?
编辑。
即使我改变了整个窗口的背景颜色,工具栏的区域也不受影响:
这是一个空的默认 Qt 小部件应用程序,其中我只添加了一个 QToolBar 和一个 QAction 以及我的 QMainWindow 的样式表
background : red;
QToolBar { background : red }
QToolButton {background : red}
Run Code Online (Sandbox Code Playgroud)
这是预期的行为还是 linux 上的 qt 错误?
编辑。
我在使用 Qt 4.8 和 Qt 5.4.2 的 Xubuntu 14.04 上尝试了这段代码。这似乎是 Qt 上的一个错误。请参阅下面我自己的答案。
我有一些 QWidget (QLineEdit),我想将它对齐到 QToolbar 的右侧。
有什么简单的方法可以做到吗?
在浮动工具栏中恢复具有QCombobox的QMainWindow状态时,我看到一个问题。恢复浮动工具栏后,我的QCombobox无法获得焦点,直到我单击工具栏手柄并将其移动。以下是显示问题的gif,使用QT 5.13。

文件float_toolbar.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = floating_toolbar
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Run Code Online (Sandbox Code Playgroud)
档案:main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w; …Run Code Online (Sandbox Code Playgroud) 我希望从一个切换QToolButton到另一个QToolBar.我已经习惯了QStackedWidget,它们从一个移动widget到另一个太简单了,但在这里我无法通过使用来获得移动方式keyReleaseEvent.
mywindow::mywindow() : QMainWindow()
{
widget = new QWidget();
setCentralWidget(widget);
tool = new QToolBar();
vertical = new QVBoxLayout();
button1 = new QToolButton();
connect( button1, SIGNAL(clicked()), this, SLOT(fileNew()) );
button2 = new QToolButton();
button3 = new QToolButton();
button1->setIcon(QIcon("download.jpg"));
button1->setGeometry(0,0,100,200);
button2->setIcon(QIcon("images.jpg"));
button3->setIcon(QIcon("settings-icon.jpg"));
//stack1->addWidget(button1);
//stack1->addWidget(button2);
//stack1->addWidget(button3);
tool->addWidget(button1);
tool->addWidget(button2);
tool->addWidget(button3);
//tool->addWidget(stack1);
vertical->addWidget(tool);
widget->setLayout(vertical);
}
void mywindow::keyReleaseEvent(KeyEvent *event)
{
switch(event->key())
{
case:Qt::Key_Left:
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 PyQt5、QMainWindow,我想将工具栏的默认位置更改为右侧。我该怎么做?
用户可以使用鼠标将工具栏移动到窗口的边缘,但是如何使用程序来做到这一点呢?
def initUI(self):
self.toolbar = self.addToolBar('Example')
Run Code Online (Sandbox Code Playgroud) 我已经QActions添加到QToolBarusing addAction().
我希望工具栏按钮工具提示显示快捷方式。例如复制(Ctrl+C)。当然,我可以静态设置
action->setTooltip(QString("%1 (%2)").arg(action.toolTip(), action->shortcut().toString(QKeySequence::NativeText)));
Run Code Online (Sandbox Code Playgroud)
然而,这非常麻烦,因为有很多操作,并且用户可以修改快捷方式,因此我必须跟踪并相应更新。如果我可以通过类似于http://doc.qt.io/qt-5/qtwidgets-widgets-tooltips-example.htmlQToolBar的子类来简单地修改工具提示行为,那就更好了。QToolBar
不幸的是,事情没那么简单。工具提示不是由其本身生成的QToolBar,而是显然是由QToolButton使用时在内部创建的addAction()。所以理想情况下我会注入我自己的QToolButton. 但这似乎是不可能的,因为工具按钮的实际实例化是在我无法访问的私有 QToolBarLayout 内完成的。
有什么想法如何解决这个问题吗?
我正在尝试扩大 QIcon,但它不起作用。
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
exitIcon = QPixmap('./icons/outline-exit_to_app-24px.svg')
scaledExitIcon = exitIcon.scaled(QSize(1024, 1024))
exitActIcon = QIcon(scaledExitIcon)
exitAct = QAction(exitActIcon, 'Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.triggered.connect(qApp.quit)
self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAct)
self.setWindowTitle('Toolbar')
self.show()
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,它似乎不起作用。我试过用 QPixmap 和直接用 QIcon 加载图标,但无论如何它都是一样的小尺寸。
我在这里做错了什么?