小编Rom*_*dgz的帖子

修复JComboBox宽度

我有一个JComboBox有一些选项.当我在另一个组件上做出选择时,我正在改变JComboBox的内容.首先我调用该removeAllItems()方法,然后逐个添加我现在需要的字符串.

问题是,默认情况下我有一些选项,其中一个是较大的文本,因此JComboBox获得了正确显示该选项所需的宽度.当我更改JComboBox内容时,该文本选项消失了,现在一个较小的文本给了JComboBox的宽度,所以当我更改内容时它会变小.

我的第一种方法是调用myComboBox.setPreferredSize(myComboBox.getSize()),然后它的尺寸是固定的,但不正确:它的高度和宽度略小一些.我认为这是因为我正在使用Nimbus Look&Feel,而我从该getSize()方法获得的维度是Java默认的Look%Feel给出的维度.

我也试过myCombo.setPreferredSize(new Dimension(myCombo.getHeight(), myCombo.getWidth()))了同样的结果.

我该如何处理这个问题?

我添加了一个代码示例,说明我如何使用布局:

    private String[] comboEventDOutputStrings = { "Run", "Stop", "Pause", "Conditioning time", "Deposition time", "Equilibration time", "Measurement time"};
    private String[] comboEventDInputStrings = { "Run", "Stop", "Pause"};
    // The first String array is the default set of values. It's obvious that the JComboBox will get smaller
    // when I change to the second array of contents

        //...   
            JPanel pane = new JPanel(new GridBagLayout());
            JPanel jPanelExterno = …
Run Code Online (Sandbox Code Playgroud)

java swing dimensions jcombobox nimbus

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

使用 Qt 将 HTML 转换为 PDF

我正在尝试将 HTML 文件转换为 PDF。整个想法是创建一个包含多个页面的 pdf,用 HTML 文件内容填充第一个页面。目前我正在尝试这样做,代码是:

  #include "qprinterexample.h"
    #include <QtGui/QApplication>
    #include <QTextDocument>
    #include <QTextStream>
    #include <QFile>
    #include <QPrinter>
    #include <QDir>

   int print(){
    const int highQualityDPI = 300;
    QDir::setCurrent(QCoreApplication::applicationDirPath());

    QFile  htmlFile ("ejemplo.htm");
    if (!htmlFile.open(QIODevice::ReadOnly | QIODevice::Text)){
        return -1;
    }

    QString htmlContent;
    QTextStream in(&htmlFile);
    in >> htmlContent;

    QTextDocument *document = new QTextDocument();
    document->setHtml(htmlContent);

    QPrinter printer(QPrinter::HighResolution);
    printer.setPageSize(QPrinter::A4);
    printer.setOutputFormat(QPrinter::PdfFormat);

    printer.setOutputFileName("output.pdf");

    document->print(&printer);
    delete document;
    return 0;
}

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QPrinterExample w;
        if(print()<0) return -1;
        w.show();
        return a.exec(); …
Run Code Online (Sandbox Code Playgroud)

c++ pdf qt

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

Qt 小部件 setStyleSheet

由于我正在为平板电脑环境编程,因此某些小部件对于可触摸交互来说太小了。我想让 QSpinBox 按钮特别大。

经过一番搜索,我发现 setStyleSheet 函数出现的唯一方法,但是它并没有很好地解释如何使用它。在这个指向 Qt 参考的链接中,描述了我应该将什么传递给 setStyleSheet 函数,但不清楚我是否可以使用它的一部分,或者即使我只想更改一件事,我也应该使用所有它。

无论如何,使用它的一部分或整个文本,在应用此设置后,我的 QDoubleSpinBox 看起来是默认值。当我在 mi ui 文件中绘制时,它比现在更大。当然,它不是将其背景涂成黄色(只是为了检查它是否正常工作)或使按钮变大。

我正在使用这个功能:

customizeSpinBox(ui.doubleSpinBoxDistanciaLocalizador);
                ui.doubleSpinBoxDistanciaLocalizador->setVisible(true);

void MyClass::customizeSpinBox(QDoubleSpinBox *spinBox){

qApp->setStyleSheet("QSpinBox { border: 3px solid red; border-radius: 5px; background-color: yellow; }"
                       "QSpinBox::up-arrow { border-left: 17px solid none;"
                       "border-right: 17px solid none; border-bottom: 17px solid black; width: 0px; height: 0px; }"
                       "QSpinBox::up-arrow:hover { border-left: 17px solid none;"
                       "border-right: 17px solid none; border-bottom: 17px solid black; width: 0px; height: 0px; }"
                       "QSpinBox::up-button { width: 80px; height: 77px; background-color: …
Run Code Online (Sandbox Code Playgroud)

qt qtstylesheets

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

使用GridBagLayout右对齐

我正在使用GridBagLayout创建一个简单的GUI,几乎一切顺利,但有这个细节:有两列,左边一个用于标签,另一个用于其他小部件,如JTextArea,我希望第一列对齐到右边.

所以我尝试将锚定属性设置为GridBagConstraints.NORTHEAST或.EAST,并且它们都不起作用.

我的代码如下:

private void createDataPanel() {
        data = new JPanel();
        data.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        data.setBorder(new TitledBorder("NOTAM proposal parameters"));

        c.gridx = 0;
        c.gridy = 0;
        c.insets = new Insets(5, 10, 5, 10);
        c.fill = GridBagConstraints.HORIZONTAL;
        data.add(new JLabel("Start time (DD-MM-YYYY HH:MM:SS):"), c);

        c.gridx++;
        long today = System.currentTimeMillis();
        startTimePicker = new JXDatePicker(new Date(today));
        startTimePicker.setFormats(dateFormatter);
        data.add(startTimePicker);

        c.gridx = 0;
        c.gridy++;
        c.anchor = GridBagConstraints.EAST;
        data.add(new JLabel("End time (DD-MM-YYYY HH:MM:SS):"), c);

        c.gridx++;
        c.anchor = GridBagConstraints.CENTER;
        long tomorrow = today + 86400000;
        endTimePicker …
Run Code Online (Sandbox Code Playgroud)

java swing alignment gridbaglayout

4
推荐指数
2
解决办法
7499
查看次数

用C++解析二进制消息.任何包含示例的lib?

我正在寻找在C++中解析二进制消息的任何示例库.大多数人要求读取二进制文件或在套接字中接收的数据,但我只需要解码一组二进制消息.有人提到了boost :: spirit,但我找不到合适的例子来满足我的需求.

例如:9A690C12E077033811FFDFFEF07F042C1CE0B704381​​E00B1FEFFF78004A92440

其中前8位是前同步码,接下来是6位msg ID(0到63之间的整数),接下来的212位是数据,最后24位是CRC24.

所以在这种情况下,msg 26,我必须从212个数据位获取这些数据:

  • 4位整数值
  • 4位整数值
  • 从0到63.875的9位浮点值,其中LSB为0.125
  • 4位整数值

编辑:我需要在位级操作,因此memcpy不是一个好的解决方案,因为它复制了许多字节.要获得第一个4位整数值,我应该从一个字节获得2位,从下一个字节获得另外2位,移位每一对并组成.我要求的是一种更优雅的方法来提取值,因为我有大约20种不同的消息,并希望达到一个通用的解决方案来解析它们的位级别.

等等.

你知道os可以轻松实现这个吗?

我还发现了其他使用static_cast的Q/A. 我用Google搜索,并且对于推荐这种方法的每个人,还有另一个关于端序的警告.由于我已经有了我的消息,我不知道这样的警告是否适用于我,或者只是用于套接字通信.

编辑:提升:dynamic_bitset看起来很有希望.任何使用它的帮助?

c++ parsing bit-manipulation

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

C++中的struct继承与类继承

我刚刚从这个Q/A中发现结构在C++中是可继承的,但它是一个好的实践,还是更适合使用类?哪种情况更可取,哪种情况不适合?

我从来没有需要这个,但现在我有一堆不同类型但经度相同的消息.我在char数组中使用二进制文件,我只是将它们与memcpy一起复制到结构中以填充其字段(我不知道是否甚至可以使用std :: copy).

我想能够使用公共头继承基础结构中的每个结构都很棒,这就是我搜索它的原因.所以第二个问题是:如果我用类做这个,是否可以从缓冲区到类中执行memcpy(或std:copy)?

c++ inheritance struct memcpy

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

使 TextView 可滚动而不知道最大行数

我想让我的 TextView 垂直滚动。我读过“在Android中使TextView可滚动”,但由于我不知道最终设备的屏幕尺寸,所以我不知道应该为最大行数设置哪个值。

还有其他方法可以实现任何屏幕尺寸的滚动吗?

我的 XML 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ScrollView
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:layout_weight="1.0">
        <TextView
            android:id="@+id/consola"
            android:layout_width="fill_parent" 
            android:layout_height="match_parent"/>
    </ScrollView>

    <EditText 
        android:id="@+id/comando"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.0"/>

    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.0">

        <Button
            android:text="Conectar"
            android:id="@+id/boton_conectar"
            android:layout_width="wrap_content"
            android:layout_weight="0.5"
            android:layout_height="wrap_content">
        </Button>
        <Button
            android:text="Enviar"
            android:id="@+id/boton_enviar"
            android:layout_width="wrap_content"
            android:layout_weight="0.5"
            android:layout_height="wrap_content">
        </Button>
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android scroll textview

3
推荐指数
1
解决办法
9422
查看次数

JTextArea仅包含数字,但允许负值

我有一个JTextArea,只需要接受数字.这是我的代码:

DocumentFilter onlyNumberFilter = new AxisJTextFilter();
    final JTextArea areaTextoXMin = new JTextArea(String.valueOf(xMin));
    ((AbstractDocument)areaTextoXMin.getDocument()).setDocumentFilter(onlyNumberFilter);
Run Code Online (Sandbox Code Playgroud)

适用于正数,但不适用于负数.我该如何解决这个问题?

编辑:对不起,AxisJTextFilter是在互联网上找到的,我忘记了.它的代码是:

import javax.swing.text.*;
import java.util.regex.*;

public class AxisJTextFilter extends DocumentFilter
{
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.insert(offset, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.insertString(offset, text, attr);
    }
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.replace(offset, offset + length, text); …
Run Code Online (Sandbox Code Playgroud)

java swing jtextarea negative-number documentfilter

3
推荐指数
1
解决办法
1979
查看次数

当每个单元格不可编辑时,可以选择JTable行

我有一个表来显示值,在这个表中用户可以选择一行,但不能更改其内容.我的代码是:

    JTable tablaCurvas1 = new JTable();
    TableCellRenderer tableRender = new SubtractTableRenderer();
    tablaCurvas1.setDefaultRenderer(Object.class, tableRender);
    tablaCurvas1.setModel(new DefaultTableModel(rowData, columnNames){
        private static final long serialVersionUID = 1L;
    @Override
       public boolean isCellEditable(int row, int column) {
           return false; //So I make every cell non-editable
       }

    });

    JScrollPane scrollPane = new JScrollPane(tablaCurvas1);
    tablaCurvas1.setFillsViewportHeight(true);
    tablaCurvas1.setPreferredScrollableViewportSize(new Dimension(200,100));
    pane.add(scrollPane,c);
Run Code Online (Sandbox Code Playgroud)

但是当我点击它们时,现在不会选择表行.我该怎么解决这个问题?

java swing jtable

3
推荐指数
1
解决办法
9268
查看次数

登录 Python 脚本不起作用:导致日志文件为空

我有一个具有日志记录功能的脚本,但它停止工作(日志记录,而不是脚本)。我写了一个小例子来说明问题:

import logging
from os import remove
from os.path import exists


def setup_logger(logger_name, log_file, level=logging.WARNING):
    # Erase log if already exists
    if exists(log_file):
        remove(log_file)
    # Configure log file
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(message)s')
    fileHandler = logging.FileHandler(log_file, mode='w')
    fileHandler.setFormatter(formatter)
    streamHandler = logging.StreamHandler()
    streamHandler.setFormatter(formatter)
    l.setLevel(level)
    l.addHandler(fileHandler)
    l.addHandler(streamHandler)


if __name__ == '__main__':
    setup_logger('log_pl', '/home/myuser/test.log')
    log_pl = logging.getLogger('log_pl')
    log_pl.info('TEST')
    log_pl.debug('TEST')
Run Code Online (Sandbox Code Playgroud)

在脚本的末尾,创建了文件 test.log,但它是空的。

我错过了什么?

python logging

3
推荐指数
1
解决办法
6516
查看次数