Показать/скрыть QDockWidget?

Вы хотят сравнить число с его реверсом, это может быть быстрее для инвертирования подразделения использования числа вместо того, чтобы преобразовать его в строку. Я все еще должен протестировать скорость его.

 private static int Reverse(int num) {
     int res = 0;
     while (num > 0) {
        int rm ;
        num = Math.DivRem(num, 10, out rm);
        res = res * 10 + rm;
     }
     return res;
  }

РЕДАКТИРОВАНИЕ: DivRem был приблизительно на 1% быстрее, чем подразделение и модуль в моем компьютере. Оптимизация скорости является выходом, если последняя цифра 0:

  private static int Reverse(int num) {
     int res = 0;
     int rm;
     num = Math.DivRem(num, 10, out rm);
     //Some magic value or return false, see below.
     if (rm == 0) return -1 ; 
     res = res * 10 + rm;
     while (num > 0) {
        num = Math.DivRem(num, 10, out rm);
        res = res * 10 + rm;
     }
     return res ;
  }

Создание метода возвратить bool было немного медленнее, чем по сравнению с bool в цикле в моем компьютере, но я не понимаю почему. Протестируйте в своем компьютере.

Умножение и бит-shifing должны быть быстрее, чем подразделение, но вероятно не достаточно точны.Править: использование долго кажется быть достаточно точным.

  private static int FastReverse(int num) {
     int res = 0;
     int q = (int)((214748365L * num) >> 31);
     int rm = num - 10 * q;
     num = q;
     if (rm == 0) return -1;
     res = res * 10 + rm;
     while (num > 0) {
        q = (int)((214748365L * num) >> 31);
        rm = num - 10 * q;
        num = q;
        res = res * 10 + rm;
     }
     return res;
  }

(214748365L * цифра)>> 31 равно мне / 10 до 1,073,741,829, где 1 / 10 дает 107374182 и умножение +, двоичное смещение дает 107374183.

6
задан mpen 17 August 2009 в 20:20
поделиться

1 ответ

Вместо создания нового действия просто получите действие из самого QDockWidget и используйте его. Он позаботится о состоянии за вас:

http://qt-project.org/doc/qt-4.8/qdockwidget.html#toggleViewAction

QAction * QDockWidget :: toggleViewAction () const

" Возвращает проверяемое действие, которое можно использовать для отображения или закрытия этого закрепляемого виджета.

Текст действия устанавливается равным заголовку окна закрепляемого виджета. "

24
ответ дан 8 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: