相关疑难解决方法(0)

clang:没有外联虚拟方法定义(纯抽象C++类)

我正在尝试使用Clang-3.5编译以下简单的C++代码:

test.h:

class A
{
  public:
    A();
    virtual ~A() = 0;
};
Run Code Online (Sandbox Code Playgroud)

test.cc:

#include "test.h"

A::A() {;}
A::~A() {;}
Run Code Online (Sandbox Code Playgroud)

我用来编译它的命令(Linux,uname -r:3.16.0-4-amd64):

$clang-3.5 -Weverything -std=c++11 -c test.cc
Run Code Online (Sandbox Code Playgroud)

而我得到的错误:

./test.h:1:7: warning: 'A' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]
Run Code Online (Sandbox Code Playgroud)

任何暗示为什么会发出警告?虚拟析构函数根本没有内联.恰恰相反,test.cc中提供了一个外联定义.我在这里错过了什么?

编辑

我不认为这个问题是重复的: clang的-Wweak-vtables是什么意思? 正如FilipRoséen所说.在我的问题中,我特别提到纯抽象类(在建议的副本中没有提到).我知道如何-Wweak-vtables使用非抽象类,我很好.在我的例子中,我在实现文件中定义了析构函数(它是纯抽象的).这应该可以防止Clang发出任何错误,即使是-Wweak-vtables.

c++ clang llvm-clang clang++

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

在调整大小期间保持子类QWidget的宽高比

我正在创建一个新的小部件,通过继承QWidget类.我希望能够为这个小部件设置一个比例(高度和宽度),它将始终保持不变.

为此,我总是使用Qt5文档,Google和Stackoverflow进行搜索.显然,我找到了答案:特别是这一个.但是,不幸的是,甚至没有一个是完全有效的:

  • sizeIncrement即使窗口小部件是窗口,设置也完全没有
  • 我试图重载resizeEvent,但我真的不知道怎么做...
  • 如果我按照这个答案,有两件事:

    1. 如果小部件是顶级窗口,则根本不保持比例,我可以根据需要调整大小.
    2. 如果我将此小部件放置在布局中,如果我只增加窗口的宽度和高度,则保持该比率.但是一旦我将宽度或高度增加到很多,小部件就会变平.相反,我希望布局自动调整其大小以保持小部件的比例.

那么,我怎样才能保持子类QWidget的宽高比?

c++ qt qwidget

12
推荐指数
2
解决办法
4643
查看次数

不调用QWidget :: heightForWidth()

我想让我的小部件总是有方形尺寸.根据这个答案,我已经覆盖了QWidget::heightForWidth(),我也setHeightForWidth(true)按照@peppe的建议调用了构造函数.大小策略设置为Preferred,Preferred(水平大小和垂直大小).

但是,heightForWidth()没有被召唤.有什么我做错了吗?

这是我Widget班级中heightForWidth()的声明:

virtual int heightForWidth(int) const;
Run Code Online (Sandbox Code Playgroud)

这种情况发生在Linux和Windows上.

c++ qt

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

PyQt 保持纵横比固定

我正在研究 PyQt5 GUI,到目前为止,我只是有使用 python 脚本的经验,并没有深入研究创建用户界面。

GUI 必须用于不同的屏幕(可能还有一些旧的 4:3 比例屏幕),并且需要在不同尺寸下看起来不错。现在,我让我的生活更轻松的方法是强制执行窗口的固定纵横比并根据窗口大小调整不同元素的大小。

from PyQt5 import QtCore, QtGui, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent= None):
        super().__init__(parent)
        self.form_widget = FormWidget(self)
        self.setCentralWidget(self.form_widget)
        self.resize(200, 400)
        self.sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        self.sizePolicy.setHeightForWidth(True)
        self.setSizePolicy(self.sizePolicy)

    def heightForWidth(self, width):
        return width * 2

class FormWidget(QtWidgets.QWidget):

    def __init__(self, parent):
        super().__init__(parent)

    def resizeEvent(self, event):
        f = self.font()
        temp = event.size().height()
        f.setPixelSize(temp / 16)
        self.setFont(f)

        return super().resizeEvent(event)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

根据窗口大小调整元素大小工作正常,但根本不保留窗口纵横比。我heightForWidth从旧的 PyQt4 …

python pyqt aspect-ratio python-3.x pyqt5

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

调整主窗口大小时强制使用纵横比

我知道在 Qt4 中,您无法设置单个标志来让鼠标驱动的窗口大小调整保持一定的纵横比(例如 1:1)。有没有办法在“resizeEvent (QResizeEvent * event)”中强制窗口的新大小?事件的参数似乎不支持更改或给用户注入新大小的机会。

我的目标:GUI/鼠标调整某个窗口的大小将保持其当前的纵横比,无论您从哪里调整它的大小(侧面、顶部、底部、角落)。

qt

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

如何保持Qt5中小部件的特定高宽比?

我尝试了覆盖方法hasHeightToWidth()和heightToWidth(),但是由于某些原因,该方法不起作用。有没有可以使用的完整示例?

Upd1:

class MyWidget : public QWidget {
    Q_OBJECT

public: 
    MyWidget() {
        QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
        sizePolicy.setHeightForWidth(true);
        setSizePolicy(sizePolicy);
    }
    bool hasHeightForWidth() const override {
        std::cout << __FUNCTION__ << std::endl;
        return true;
    }
    int heightForWidth(int w) const override {
        std::cout << __FUNCTION__ << " " << w << std::endl;
        return w;
    }
    QSize sizeHint() const override {
        return QSize(100, heightForWidth(100));
    }
};
Run Code Online (Sandbox Code Playgroud)

MyWidget实例将插入QHBoxLayout中。

我用的是qt5。

调试std :: cout的演示hasHeightForWidth和heightForWidth被多次调用

c++ qt qt5

5
推荐指数
0
解决办法
1065
查看次数

标签 统计

c++ ×4

qt ×4

aspect-ratio ×1

clang ×1

clang++ ×1

llvm-clang ×1

pyqt ×1

pyqt5 ×1

python ×1

python-3.x ×1

qt5 ×1

qwidget ×1