我在Windows 10上使用Qt 5.10.1,当我尝试使用维护工具添加qt存储库时,特别是我需要添加Qt Charts模块.然后它给了我这个错误:
您的维护工具似乎早于3.0.2.请先更新它以获取新的Qt包.
为什么会这样?我目前正在使用最新的Qt版本,但我没有找到更新维护工具的方法.我怎么解决这个问题?
我目前正在学习qt。我正在尝试构建一个带有81的小型GUI程序QPushButton。
我想将这些按钮设置为9行9列。我认为可以实现此布局的最佳方法是使用QGridLayout。
运行后的样子如下:
我尝试了多种更改按钮大小的方法,但是按钮大小仍然保持默认。
这是我的代码:
void MainWindow::setButtons()
{
const QSize btnSize = QSize(50, 50);
for(int i = 0; i < 81; i++) {
btn[i] = new QPushButton(centralWidget);
btn[i]->setText(QString::number(i));
btn[i]->resize(btnSize);
}
QGridLayout *btnLayout = new QGridLayout(centralWidget);
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
btnLayout->addWidget(btn[j + i * 9], 0 + i, j);
btnLayout->setSpacing(0);
}
}
centralWidget->setLayout(btnLayout);
}
Run Code Online (Sandbox Code Playgroud)
那么我该怎么做才能真正更改这些按钮的大小?
谢谢。
我有一个 QVector
QVector(48, 64, 31, -2, 14, 5, 7, -3, -1, 13)
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用Qt机制删除所有小于0的元素。
如何以简单的方式执行此操作?
谢谢
QBarCategoryAxis当我创建图表时,我没有找到隐藏某些类别的方法。如果我不指定轴的类别,默认情况下类别将是从 1 到QBarSetsize。如果我指定类别,我如何才能仅显示 axis 中的某些类别。例如:如何只显示第一个和最后一个类别以及中间的类别QBarCategoryAxis?
编辑:
目前我得到的是这样的:
我有一个QBarSet有 6 个元素的。而且我没有设置类别文本,所以默认情况下这些类别文本是从1到6。我想要的是显示一些类别文本,比如只显示1、3、6和其余文本(2 , 4, 5) 被隐藏。
我为什么要这样做?
因为当QBarSet元素较多并且我自己指定类别文本时,通常我需要最大化窗口,以便可以看到 axisX 中显示的所有类别文本。但我只希望图表具有固定的大小,因此对于文本,我只希望显示其中的一部分。
顺便说一句,如果一个栏集有很多元素,这将是这样的,并且在最大化窗口之前,下面的文本不会完整显示。
编辑2:
这就是我想要的,我希望图表看起来像这样:
正如您所看到的,在 x 轴下方,只有 5 个文本。
假设我有一个自定义小部件并将其添加到 qt 的主窗口中。
如您所见,红色区域是自定义小部件。我想要做的是当鼠标在红色区域按下并移动时,整个窗口也会移动。
我知道如何简单地实现mousePressEvent和mouseMoveEvent;但是在处理带有自定义小部件的窗口时,我不知道如何在自定义小部件上按下鼠标时移动整个窗口。
另外我想提一下,我只希望在红色区域按下和移动鼠标时窗口可移动,当在主窗口区域的其余部分按下并移动鼠标时,什么都不会发生。
这是我的CustomWidget班级的样子:
CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent)
{
setFixedSize(50, 50);
setStyleSheet("QWidget { background: red; }");
}
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter painter(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
}
void CustomWidget::mousePressEvent(QMouseEvent *event)
{
xCoord = event->x();
yCoord = event->y();
}
void CustomWidget::mouseMoveEvent(QMouseEvent *event)
{
move(event->globalX() - xCoord, event->globalY() - yCoord);
}
Run Code Online (Sandbox Code Playgroud)
如果你想知道我为什么要这样做,在我的应用程序中,我隐藏了标题栏并自己绘制了一个自定义标题栏。但是窗口是不可移动的,所以我想让整个窗口在鼠标在标题栏上按下和移动时都可以移动。
希望我清楚地解释了自己。
我试图在Windows注册表中创建一个键,但我收到此错误:
5访问被拒绝.
代码片段如下:
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe"); //notepad.exe is the key I want to create
//note: if I change the first parameter to KEY_CURRENT_USER, the key will be created
LONG createResKey = RegCreateKeyEx(HKEY_LOCAL_MACHINE, sk, 0, NULL, REG_OPTION_BACKUP_RESTORE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
if (createResKey == ERROR_SUCCESS) {
qDebug() << "Success creating key.";
}
else {
qDebug() << "Error creating key.";
showErrorText(createResKey);
}
Run Code Online (Sandbox Code Playgroud)
也许是因为我的程序没有管理员权限,我尽力在网上进行研究并试图获得管理员权限,但失败了.我现在很困惑如何解决这个问题.
编辑:我想要实现什么?
我试图阻止一些特定的应用程序从修改注册表开始.例如,如果我想阻止记事本,首先我必须创建一个"notepad.exe"键,然后为其设置一个字符串值"debugger"并将其值设置为"debugfile.exe".因此记事本将无法启动.
我试图打开注册表并修改它.这是我打开注册表的方式:
HKEY hKey;
LPCTSTR subKey = TEXT("a registry subkey to be opened");
RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS , &hKey);
Run Code Online (Sandbox Code Playgroud)
但这是一个问题,我想用a QString来实际更改子键.并把QString这样的:
QString subKeyString = QString("%1").arg(subKeyName);
LPCTSTR subKey = TEXT(subKeyString); //but it's not working here
Run Code Online (Sandbox Code Playgroud)
我想这是因为我没有改变QString到LPCTSTR,我尝试这个解决办法,但我仍然无法想出一个办法把自定义QString成TEXT宏.我不太确定引擎盖下的WinApi,我只是尝试了我可以做的事情.
有没有办法解决这个问题?
编辑:
这是我如何转换QString为LPCTSTR:
QString testString = "converting QString to LPCSTR";
QByteArray testStringArr = testString.toLocal8Bit();
LPCSTR lp = LPCSTR(testStringArr.constData()); //the QString is converted to LPCTSTR
//but when I put the LPCSTR to …Run Code Online (Sandbox Code Playgroud) 当我阅读 Qt 的一些示例代码时,我通常会看到它们初始化了一个指向 的指针nullptr,例如:
QPushButton *startButton = nullptr;
Run Code Online (Sandbox Code Playgroud)
我有一些非常基本的概念nullptr,但自从我开始学习 C++ 以来,我从未真正使用过它。所以我想知道为什么他们会初始化一个指向nullptr而不是这样做的指针:QPushButton *startButton;,这样做有什么好处,我什么时候需要初始化指向nullptr?
提前致谢。
我知道如何在发出消息时向新连接的客户端发送消息QTcpServer newConnection。我所做的是这样的:
connect(serverConnection.tcpServer, &QTcpServer::newConnection, this, &ServerInterface::sendMessages);
void ServerInterface::sendMessages()
{
QByteArray messagesToClients;
QDataStream out(&messagesToClients, QIODevice::WriteOnly);
QTcpSocket *clientConnection = serverConnection.tcpServer->nextPendingConnection();
out << inputBox->toPlainText(); //get text from QTextEdit
clientConnection->write(messagesToClients);
}
Run Code Online (Sandbox Code Playgroud)
但是我想要做的是每当在服务器中单击发送消息按钮时,它就会向当前连接的客户端发送消息。我提供的代码只能向新连接的客户端发送一条新消息。我不知道如何实现我想做的事情,所以有人可以为我提供一种方法吗?我是 Qt 网络的新手。
谢谢。
qt ×9
c++ ×6
qt5 ×5
windows ×2
nullptr ×1
pointers ×1
qchart ×1
qgridlayout ×1
qmouseevent ×1
qpushbutton ×1
qtcpserver ×1
qvector ×1
qwidget ×1