小编Rei*_*ica的帖子

无法在 Qt 中调用静态方法

我有一个包含静态属性的简单类。这个类中有两个静态方法:一个获取静态属性,另一个初始化它。然而,当调用静态方法时,编译器会报告错误。

班上:

class Sudoku {
    Cell Grid[9][9];
    int CurrentLine;
    int CurrentColumn;

    void deleteValInColumn(int val, int col);
    void deleteValInRow(int val, int row);
    void deleteValInBox(int val, int x, int y);
    static int unsetted; //!
public:
    static void IniUnsetted() { //!
        unsetted = 0;
    }
    static int GetUns() { //!
        return unsetted;
    }
    Sudoku(ini InitGrid[9][9]);
    void Calculate_Prob_Values();
    Cell getCell(int x, int y);
    QVector<int> getPossibleValues(int x, int y);
    bool SolveIt();
};
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

In member function 'bool Sudoku::SolveIt()':
no return statement in function returning non-void …
Run Code Online (Sandbox Code Playgroud)

c++ qt static class

5
推荐指数
2
解决办法
8247
查看次数

如何使用 QProcess 执行 cmd 命令?

我正在尝试使用执行 cmd 命令

QProcess::startDetached("cmd /c net stop \"MyService\"");
Run Code Online (Sandbox Code Playgroud)

这似乎并没有停止服务。但是,如果我从 start >> run 运行它,它会起作用。

c++ qt

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

链接器找不到dlsym

我正在尝试使用Qt 5.3.0在Linux Mint 17中编译C ++程序。我已将以下行添加到.pro文件中:

QMAKE_LFLAGS += -ldl -fPIC
Run Code Online (Sandbox Code Playgroud)

我的程序使用dlsym,但是链接程序找不到它。这是错误消息:

undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
Run Code Online (Sandbox Code Playgroud)

如何链接我的程序?

c++ linux qt qmake qt-creator

5
推荐指数
1
解决办法
6640
查看次数

Qt标签中的QLabel页边距和样式表填充

我有一个标签,并在样式表中设置了填充,并使用设置了边距setMargin()

ui->label->setPixmap(redRectWithGreenBorder(80, 40));
ui->label->setStyleSheet("QLabel {border: 1px solid gray;border-radius: 2px;background-color: white;padding: 0px 5px 10px 15px;}");
ui->label->setMargin(5);
Run Code Online (Sandbox Code Playgroud)

但这实际上是这样的:

在此处输入图片说明

可见边距为5、10、15和20(我使用图像编辑器检查过)。也就是说,它们等于该边的样式表的值加上的值margin(),即0 + 5、5 + 5、10 + 5、20 + 5。

但是,文档说明了以下内容setMargin()

margin:int此属性保存边距的宽度。

边距是帧的最内像素和内容的最外像素之间的距离。

默认边距为0。

如果我以书面形式取文件,我会期望边距是内容与边界之间的真实距离。但事实并非如此。而是,边距和样式表填充的总和才是实际边距。

我的问题是,此行为在文档中的何处描述?在文档中是否有其他地方指定了我错过的这种行为?

c++ qt qtstylesheets

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

即使 QTabletEvent 被接受,QWidget 的 mousePressEvent 也会被调用

在实现了 tabletEvent(QTabletEvent *event) 和 mousePressEvent(QMouseEvent *event) 的 QWidget 派生类对象中,每次使用 TabletEvent::TabletPress 类型调用 tabletEvent 时都会调用 mousePressEvent。根据Qt 文档,这不应该发生:

事件处理程序 QWidget::tabletEvent() 接收 TabletPress、TabletRelease 和 TabletMove 事件。Qt 将首先发送一个平板电脑事件,然后如果它不被任何小部件接受,它将发送一个鼠标事件

主窗口.cpp

#include "mainwindow.h"
#include "tabletwidget.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    TabletWidget* tw = new TabletWidget(this);
    setCentralWidget(tw);
}
Run Code Online (Sandbox Code Playgroud)

平板电脑.h

#ifndef TABLETWIDGET_H
#define TABLETWIDGET_H

#include <QWidget>

class TabletWidget : public QWidget
{
    Q_OBJECT
public:
    explicit TabletWidget(QWidget *parent = 0);

protected:
    void tabletEvent(QTabletEvent *event) Q_DECL_OVERRIDE;
    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

signals:

public slots:
};

#endif // TABLETWIDGET_H …
Run Code Online (Sandbox Code Playgroud)

c++ qt mouseevent qt5

5
推荐指数
1
解决办法
1384
查看次数

我可以在不使用矩形的情况下在Qt c ++中绘制椭圆吗?

我在Qt中使用c ++,我想绘制一个椭圆.从Qt文档中我发现我可以使用drawEllipse从边界矩形中绘制一个椭圆:

void QPainter::drawEllipse(const QRectF &rectangle)
Run Code Online (Sandbox Code Playgroud)

矩形由下式给出:

QRectF(qreal x, qreal y, qreal width, qreal height)
Run Code Online (Sandbox Code Playgroud)

但是,这仅提供具有水平/垂直长轴和短轴的椭圆.

我的椭圆由两个坐标集给出,表示长轴和长轴和短轴的长度之比.因此,轴可以具有非水平或垂直的斜率.(无论如何我需要使用这个方法,因为我也将它导出到dxf文件,其中有这种表示法)

我的问题是:

有没有其他方法来绘制椭圆而不是使用边界矩形然后旋转它?

将它放在水平/垂直矩形中然后在从头开始有轴坐标时计算旋转似乎有点傻.

c++ qt ellipse

5
推荐指数
1
解决办法
691
查看次数

将QMenu :: addAction直接连接到lambda(函数签名不匹配)

如何QAction直接连接lambda插槽?

QMenu m;
Run Code Online (Sandbox Code Playgroud)

工作:

QAction newSubfolder(QIcon(":/icons/newfolder.png"),tr("New Subfolder"),&m);
m.addAction(&newSubfolder);
connect(&newSubfolder,&QAction::triggered,
        this,[this,p](){qDebug()<<"New Subfolder";});
Run Code Online (Sandbox Code Playgroud)

不工作:

m.addAction(QIcon(":/icons/newfolder.png"),tr("New Subfolder"),
                [this,p](){qDebug()<<"New Subfolder";});
Run Code Online (Sandbox Code Playgroud)

错误:

No matching function for call to 'QMenu::addAction(QIcon, QString, FolderMenuWidget::showContextMenu(QPoint)::__lambda0)'
                 [this,p](){qDebug()<<"New Subfolder";});
                                                       ^
Run Code Online (Sandbox Code Playgroud)

是的我看到了错误消息,但我不明白我需要为lambda插槽更改什么.如果我this在lambda之前添加成员指针,它也不起作用.

这是在Qt 5.3中.

c++ qt

5
推荐指数
1
解决办法
1121
查看次数

如何按值返回“QObject”派生类?

为了提高代码可读性,我想在函数内创建一个对象并按值返回它(我让编译器承担优化内存的任务)。

如果我有常规课程,我可以执行以下操作:

MyClass myFunction01()
{
  MyClass theRegularObject;
  //do things
  return theRegularObject;
}
Run Code Online (Sandbox Code Playgroud)

所以在我的代码中我可以这样做:

MyClass myObject = myFunction01();
Run Code Online (Sandbox Code Playgroud)

但是,如果 MyClass 是 QObject 派生类(我们称之为 QObjDerivedClass),我会收到编译错误:

QObjDerivedClass::QObjDerivedClass(const QObjDerivedClass &) : attempting to reference a deleted function.
Run Code Online (Sandbox Code Playgroud)

我认为问题在于 QObject 既没有复制构造函数也没有赋值运算符QObject Doc

作为可能的解决方案,我认为有以下几种,但也许我缺少更好的解决方案?

1.在main中创建对象并将该对象作为函数的引用传递

void myFunction01(CMyClass &theObj) {//do things}

//In my program
CMyClass myObj;
myFunction01(myObj);
Run Code Online (Sandbox Code Playgroud)

2.在函数内部创建一个动态对象并返回一个指针(智能指针?)

QSharedPointer<CMyClass> myFunction01()
{
  QSharedPointer<CMyClass> p_theObj(new CMyClass);            
  //do things
  return p_theObj;
}

//At my program
QSharedPointer<CMyClass> p_myObj = myFunction01();

//When p_myObj goes out of scope the CMyClass object …
Run Code Online (Sandbox Code Playgroud)

c++ qt

5
推荐指数
1
解决办法
2213
查看次数

什么是QMetaCallEvent以及如何访问其详细信息?

我有一个事件过滤器,当我点击展开/折叠我得到的树枝时,我注意到了QEvent::MetaCall.我正在考虑使用它来滚动我自己的展开/折叠代码,但我不知道如何获取任何信息,例如项目的索引.

这个MetaCall事件类型有什么可用的吗?

我发现有人在另一个网站上问过同样的问题,但没有答案,请点击此处:http: //www.qtcentre.org/threads/37525-How-to-filter-QEvent-MetaCall

这个事件通常用于什么?

meta events qt filter qevent

4
推荐指数
1
解决办法
3182
查看次数

每次需要重新绘制时,如何在像素图中抓取 qwidget/render?

我有一个不想在屏幕上显示的 QWidget。相反,我想在每次重新绘制小部件时获取它的像素图,以便将其发送到我正在处理的应用程序的另一部分。API 提供了两种方法:QPixmap::grabWidgetQWidget::render

问题是这两种方法都会触发一个新paintEvent的小部件,创建小部件的递归重绘,所以它们不应该在paintEvent方法中使用。

那么我怎么能在每次重新绘制小部件时获得一个代表小部件的像素图呢?

qt

4
推荐指数
1
解决办法
3856
查看次数

标签 统计

qt ×10

c++ ×8

class ×1

ellipse ×1

events ×1

filter ×1

linux ×1

meta ×1

mouseevent ×1

qevent ×1

qmake ×1

qt-creator ×1

qt5 ×1

qtstylesheets ×1

static ×1