- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个构建小部件的类,我可以将其停靠到我的主应用程序中。该类继承QDockWidget
。如果愿意,这允许我停靠小部件。但是,我希望默认情况下停靠此小部件,而不是显示为单独的 float 窗口。
为了让您了解此类的布局,这里是它的标题。假设我想保留 log
和 showMessage
函数。
Logger.h
class Logger : public QDockWidget
{
Q_OBJECT
public:
explicit Logger(QWidget* parent = 0);
void log(QString message);
~Logger();
private:
QWidget* dockWidgetContents;
QGridLayout* gridLayout;
QTextEdit* LoggerEdit;
void showMessage(QString &message);
};
#endif // MESSAGES_H
在我的主应用程序的 .cpp 文件中,我使用 loggerWidget = new Logger(this);
。这有效,当我打开我的应用程序时,会弹出 Logger 小部件。然后我可以将它停靠在主窗口的任何一侧。
我遇到的问题是让这个小部件在打开时停靠在主窗口的右侧。
我四处寻找解决方案,发现类似于以下内容的内容应该在主窗口 .cpp 文件中起作用。我只是不知道如何正确实现它。
LoggerWidget = new Logger(this);
this->setWidget(LoggerWidget);
addDockWidget(Qt::RightDockWidgetArea, LoggerWidget);
LoggerWidget->setFloating(false);
我认为问题是因为我的 Logger
类继承了 QDockWidget
但实际上不是 QDockWidget
,所以我不能只需在主 .cpp 文件中执行 addDockWidget
。
如何在保留类提供的功能的同时完成这项工作?
最佳答案
假设第二段代码:
LoggerWidget = new Logger(this);
this->setWidget(LoggerWidget);
addDockWidget(Qt::RightDockWidgetArea, LoggerWidget);
LoggerWidget->setFloating(false);
位于继承自 QMainWindow 的类的构造函数中(否则您将没有 addDockWidget
等功能),如果您执行此代码,您可能会遇到奇怪的行为,因为您添加的是相同的小部件 (LoggerWidget
) 到窗口的中央部分以及可停靠区域(如果有效,您将在两者中看到完全相同的内容)。请在附带的代码中找到一个 QMainWindow 的简单示例,该示例带有一个中央小部件和一个继承自 QDockWidget 的停靠小部件:
记录器 header
#ifndef LOGGER_H
#define LOGGER_H
#include <QDockWidget>
#include <QTextEdit>
class Logger : public QDockWidget
{
Q_OBJECT
public:
explicit Logger(QTextEdit* source, QWidget* parent = 0);
~Logger();
public slots:
void log(QString message);
private:
QTextEdit* LoggerEdit;
QTextEdit* texteditSource;
void showMessage(QString message);
};
#endif // LOGGER_H
记录器 cpp
#include "logger.h"
Logger::Logger(QTextEdit* source, QWidget* parent):
QDockWidget(parent),texteditSource(source)
{
QDockWidget::setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
LoggerEdit = new QTextEdit();
LoggerEdit->setReadOnly(true);
QDockWidget::setWidget(LoggerEdit);
}
Logger::~Logger()
{
delete LoggerEdit;
}
void Logger::log(QString message)
{
showMessage(message);
}
void Logger::showMessage(QString message)
{
LoggerEdit->setText(message);
}
主窗口小部件标题
#ifndef CUSTOMMAINWINDOW_H
#define CUSTOMMAINWINDOW_H
#include <QMainWindow>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>
#include "logger.h"
class MainWindow: public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent = 0);
private slots:
void buttonClicked();
private:
QTextEdit* textEdit;
Logger* logger;
QPushButton* button;
};
#endif // CUSTOMMAINWINDOW_H
主窗口小部件 cpp
#include "custommainwindow.h"
MainWindow::MainWindow(QWidget* parent):
QMainWindow(parent)
{
// Set window title
QMainWindow::setWindowTitle("Simple Example");
// Create central text
textEdit = new QTextEdit;// text edit to get text for the docked widget
// Create update button
button = new QPushButton("Update dockable widget");
// Create Logger inherited from QDockWidget
logger = new Logger(textEdit);
QMainWindow::addDockWidget(Qt::RightDockWidgetArea,logger);
// Set central widget
QMainWindow::setCentralWidget(new QWidget);
QMainWindow::centralWidget()->setLayout(new QVBoxLayout);
QMainWindow::centralWidget()->layout()->addWidget(textEdit);
QMainWindow::centralWidget()->layout()->addWidget(button);
// Connect for update docked wiget
QObject::connect(button,SIGNAL(clicked()),this,SLOT(buttonClicked()));
}
void MainWindow::buttonClicked()
{
logger->log(textEdit->toPlainText());
}
关于c++ - 应用程序启动时停靠 QDockWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806767/
H 在那里。 谁能告诉我如何设置标签化的 QDockWidget 弹出到前面(作为事件停靠栏)? 在下图中,“full”选项卡被选中并且它的内容可见,但我想将“mouth”选项卡设置为所选选项卡并使其
我正在尝试创建一个专门的 QDockWidget,其中包含我可以在其他 Qt5 UI 中使用的一些内容。为此,我创建了一个带有 UI 表单的 QDockWidget 子类,名为 SpecialDock
我想知道是否有人知道是否可以拖动 QDockWidget从一个窗口到另一个窗口。 我正在开发一个有很多窗口的应用程序。每个窗口都有特定的用途。我想使用 QDockWidget 因为在主窗口中停靠小部件
我是 Qt 的新手,我正在尝试创建一个停靠在窗口右侧的 DockWidget。我为停靠栏设置了最大和最小宽度(正如您将在下面的代码中看到的那样)。如果使用 Qt::LeftDockWidgetArea
我有一个构建小部件的类,我可以将其停靠到我的主应用程序中。该类继承QDockWidget。如果愿意,这允许我停靠小部件。但是,我希望默认情况下停靠此小部件,而不是显示为单独的 float 窗口。 为了
我可以按如下方式添加 QDockWidgets: QDW1 QDW2; QDW3 QDW4; 使用代码 QDockWidget *dwidget = new QDockWidget(tr("QDW1"
我有一个 QDockWidget 类和一个 QMainWindow: // docker.hpp class Docker : public QDockWidget { Q_OBJECT pu
现在我的应用程序左侧有四个自定义的QDockWidgets。当您启动应用程序时,每一个都是可见的,但由于每一个的可见性,它们都非常小。 我希望三个 QDockWidgets 嵌套在一个主要的后面,以给
有没有一种简单的方法可以删除 QDockWidget 的调整大小句柄?我的停靠小部件无法调整大小(大小策略是固定的),因此将句柄放在那里只是多余的。 最佳答案 这个错误与 Qt 本身一样古老,我在这个
我有一个以 QDockWidget 作为主要小部件的 QTDesigner 对话框。当我将它停靠到主窗口并显示对话框时,它会自动自动隐藏,但允许我使用鼠标显示/隐藏它。我想默认保持可见。如果我使用鼠标
我有一个应用程序,需要在运行时根据用户输入以编程方式将固定大小的子窗口小部件添加到停靠窗口小部件。我想将这些小部件添加到 Qt::RightDockArea 上的停靠栏,从上到下直到空间用完,然后创建
我想彻底删除QDockWidget的标题栏。除了样式表,还有什么方法可以做到这一点吗? 最佳答案 dockWidget->setTitleBarWidget(new QWidget()); 关于c++
我正在制作一个小应用程序,用于使用 Qt 和 C++ 对图像应用各种滤镜。 我的问题是,是否可以在 QDockWidget 上添加多个 widget ?因为我想添加按钮以重新应用停靠栏上的最后 5 个
我想创建一个包含多个 QDockWidgets 的小部件,目的是将其放入 QMainWindow 中。问题是,如果我使用 layout->addWidget(dockWidget); 将 QDockW
当我将多个 QDockWidget 分组在同一位置时,它们的选项卡位于底部。有没有办法将它们放在顶部? 如果我可以用选项卡本身替换标题栏,那就更好了。 Eclipse IDE 具有非常相似的行为,如以
如何设置 QDockWidget 的初始宽度? 我已经实现了 sizeHint 功能,但接下来呢? 最佳答案 QDockWidget 的文档说: A QDockWidget acts as a wra
我正在使用 QDockWidgets 并将其中两个放在我的应用程序的左侧,以便可以使用选项卡在它们之间进行选择。然而,Qt 的默认行为看起来很糟糕而且不直观。它不能拖动选项卡来移动小部件,而是在必须拖
我在我的主窗口中创建了一个没有 centralwidget 的应用程序,并显示为最大化: setCentralWidget(0); setWindowState(Qt::WindowMaximized
有没有办法在样式表中更改 QDockWidget(Qt 4.8)的悬停/按下图标?我正在使用这种样式来更改默认状态的按钮图像: QDockWidget{ font-weight: bold;
我有一个停靠小部件,现在我想添加一个“窗口”菜单来显示/隐藏小部件。很容易做到 showPropWinAct = new QAction(tr("&Properties"), this); showP
我是一名优秀的程序员,十分优秀!